Op deze pagina vind je een demonstratie van een statistische techniek aan de hand van een voorbeeld.
Meer informatie over hoe je deze pagina kan gebruiken vind je in deze handleiding.
De analyse gebeurt met behulp van R en RStudio. Een inleiding tot deze software vind je hier.
Het is een goed idee om een dataset te verkennen, vooraleer je er allerlei statistische technieken op loslaat. R biedt een heel uitgebreid gamma aan functies om dat te doen.
De output van die functies dient vaak niet om te publiceren. Het is vooral de bedoeling om zelf meer inzicht te krijgen in de variabelen in je dataset en de samenhang tussen die variabelen.
Op deze pagina vind je hoe je de samenhang tussen twee categorische variabelen kan beschrijven en visueel voorstellen.
De dataset enquete
bevat gegevens van 14 variabelen geobserveerd bij 42 Amerikaanse studenten die een vak statistiek volgen.
Deze dataset kan je inladen met read.csv()
. De data kan je best meteen in een object enquete
onderbrengen zodat je die later makkelijk opnieuw kan oproepen.
enquete <- read.csv("https://statlas.ugent.be/datasets/enquete.csv")
Met str()
krijg je een opsomming van alle variabelen in de dataset. Je vindt er ook telkens bij om welk datatype het gaat. Afhankelijk van het datatype zal je sommige functies wel of juist niet kunnen gebruiken om je data te verkennen. Het heeft bijvoorbeeld geen zin om een gemiddelde te berekenen van een variabele van type chr
.
str(enquete)
'data.frame': 42 obs. of 14 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ Section : int 1 1 1 1 1 1 1 1 1 1 ...
$ Class : chr "Senior" "Freshman" "Freshman" "Freshman" ...
$ Sex : chr "F" "F" "F" "M" ...
$ Distance : int 400 450 3000 100 2000 500 1100 1000 400 450 ...
$ Height : int 62 61 61 72 69 73 60 71 70 75 ...
$ Handedness : chr "Right" "Left" "Right" "Right" ...
$ Coins : num 1.12 29 1.5 0.07 0.12 8 0.77 0 0 0 ...
$ WhiteString: int 42 45 22 40 48 30 50 45 38 36 ...
$ BlackString: int 6 5 4 4 7 8 0 6 0 12 ...
$ Reading : num 80 100 100 50 200 100 200 100 100 100 ...
$ TV : num 3 10 4 25 5 0 2 2 20 20 ...
$ Pulse : int 71 78 80 63 63 56 72 66 54 48 ...
$ Texting : int 3 100 2 200 100 1 50 30 40 25 ...
In de output van str()
zie je inderdaad dat er 14 variabelen zijn met telkens 42 observaties.
Variabelen die je interesseren kan je hier eventueel al in een apart object opslaan.
klas <- enquete$Class
geslacht <- enquete$Sex
Met table()
creëer je een kruistabel of bivariate frequentietabel waarbij je in elke cel de absolute frequentie kan aflezen.
table(klas, geslacht)
geslacht
klas F M
Freshman 7 7
Junior 3 8
Senior 3 6
Sophomore 4 4
Een belangrijk onderdeel van het verkennen van data bestaat erin om een visuele voorstelling te maken van de data. Hier tonen we hoe je dat kan doen in het R-basispakket.1
De functie barplot()
kan je gebruiken op onderstaande manier. Als argument geef je een object van type table
.
abs.freq <- table(klas, geslacht)
barplot(abs.freq,
col=c('green', 'blue', 'yellow', 'red')
)
legend('topleft',
legend=levels(factor(klas)), # let op: variabele 'klas' moet van type factor zijn
fill=c('green', 'blue', 'yellow', 'red'),
inset=c(0.1, 0.05), # positie van de legende aanpassen
cex=0.7 # grootte van de legende
)
Elke cel van de tabel hieronder bevat de proportie observaties ten opzichte van het totaal aantal observaties.
abs.freq <- table(klas, geslacht)
proportions(abs.freq)
geslacht
klas F M
Freshman 0.16666667 0.16666667
Junior 0.07142857 0.19047619
Senior 0.07142857 0.14285714
Sophomore 0.09523810 0.09523810
Kruistabellen waarbij de relatieve frequenties worden berekend per rij zijn ook mogelijk.
proportions(abs.freq, margin=1)
geslacht
klas F M
Freshman 0.5000000 0.5000000
Junior 0.2727273 0.7272727
Senior 0.3333333 0.6666667
Sophomore 0.5000000 0.5000000
En natuurlijk ook per kolom.
proportions(abs.freq, margin=2)
geslacht
klas F M
Freshman 0.4117647 0.2800000
Junior 0.1764706 0.3200000
Senior 0.1764706 0.2400000
Sophomore 0.2352941 0.1600000
Een belangrijk onderdeel van het verkennen van data bestaat erin om een visuele voorstelling te maken van de data. Hier tonen we hoe je dat kan doen in het R-basispakket.2
rel.freq <- proportions(abs.freq, margin=2)
barplot(rel.freq,
col=c('green', 'blue', 'yellow', 'red')
)
legend('bottomleft',
legend=levels(factor(klas)), # let op: variabele 'klas' moet van type factor zijn
fill=c('green', 'blue', 'yellow', 'red'),
inset=c(0.1,0.1), # locatie van de legende aanpassen
cex=0.8
)
Cramer’s V is een maat voor de associatie of samenhang tussen twee categorische variabelen. Deze maat bouwt voort op \(\chi^2\). Cramer’s V kan alle waarden van 0 tot 1 aannemen. 0 wijst op de afwezigheid van associatie terwijl 1 wijst op een perfecte associatie.
Cramer’s V kan je niet berekenen in het basispakket van functies in R. Je zal het package vcd
moeten installeren en laden.
install.packages("vcd") # eenmalig installeren
library(vcd) # package laden voor gebruik
Met de functie assocstats()
kan je Cramer’s V nu laten berekenen. Let op: je moet een tabel aan de functie geven.
kruistabel <- table(klas, geslacht)
assocstats(kruistabel)
X^2 df P(> X^2)
Likelihood Ratio 1.8445 3 0.60530
Pearson 1.8148 3 0.61173
Phi-Coefficient : NA
Contingency Coeff.: 0.204
Cramer's V : 0.208